package logica;

import java.awt.geom.Point2D;

/**
 * De klasse Orka erft van de abstracte bovenklasse Dier.
 * De klasse erft bijgevolg alle attributen en methodes van deze klasse.
 * <p>
 * Een orka beweegt net als een boid aan een constante snelheid.
 * <p>
 * De methode Dier::update() moet in deze klasse verder worden geïmplementeerd.
 * @see Dier
 *
 * @author Bart Bruynooghe
 * @author Benjamin De Clercq
 * @author Thomas Flamant
 * @author Sander Van den Broecke
 */
public class Orka extends Dier {

	// dataleden
	protected static final int HORIZON = 100;
	protected static final int EETAFSTAND = 5;
	protected static final int SNELHEID = 5;

	// constructor
	/**
	 * De constructor van Orka roept de constructor van zijn bovenklasse
	 * Dier op.
	 * @param  myZee   De zee van de Orka
	 * @param  positie De positie van de Orka
	 * @see    Dier
	 */
	public Orka(Zee myZee, Point2D.Double positie, double richting) {
		super(myZee, positie, richting);
	}

	// methodes
	/**
	 * Hier wordt extra functionaliteit toegevoegd aan de methode update()
	 * uit de abstracte bovenklasse Dier.
	 * @see    Dier
	 */
	@Override
	public void update() {
		boolean isBezigOntwijkenObstakel = ontwijkObstakels();
		if (!isBezigOntwijkenObstakel) {
			// naar dichtsbijzijnde dier gaan
			Dier dier = myZee.getDichtsteDier(HORIZON, positie);
			if (dier != null && dier instanceof Boid) {
				richting = berekenHoek(dier.getPositie());
				if (dier.getPositie().distance(positie) < EETAFSTAND) {
					myZee.eetBoid((Boid) dier);
				}
			}
		}
		verplaats();
	}

	/**
	 * Hier wordt de methode verplaats() ingevuld
	 * uit de abstracte bovenklasse Dier.
	 * @see    Dier
	 */
	@Override
	protected void verplaats() {
		int x = (int) (positie.x + SNELHEID * Math.cos(richting));
		int y = (int) (positie.y + SNELHEID * Math.sin(richting));
		positie = new Point2D.Double(x, y);
	}
}
